#!/bin/bash
#这里可替换为你自己的执行程序，其他代码无需更改
APP_NAME=poetize-java v1.0.0-beta.jar
#使用说明，用来提示输入参数
usage() {
  echo "请正确输入参数   ./serve.sh [start|stop|restart|status]"
  exit 1
}

#检查程序是否在运行
is_exist(){
  # shellcheck disable=SC2006
  # shellcheck disable=SC2009
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回0，存在返回1
  if [ -z "${pid}" ];
    then return 0
  else
    return 1
  fi
}
#检查环境参数
# shellcheck disable=SC2120
# shellcheck disable=SC1065
check_env(){
  # shellcheck disable=SC2054
  env_list=("dev", "test", "prod")
  # 判断参数是否在集合中
  # shellcheck disable=SC2199
  # shellcheck disable=SC2076
  if [[ ! " ${env_list[@]} " =~ " $1 " ]]; then
      echo "错误：输入的参数 '$1' 不符合环境参数。参数参考[dev|test|prod]"
      exit 1
  fi
}
#启动方法
# shellcheck disable=SC2120
start(){
  is_exist
  # shellcheck disable=SC2181
  if [ $? -eq "1" ];
    then echo "程序正在运行,PID:${pid}"
  else
    echo "正在启动服务..."
    echo "启动$1环境"
    nohup java -XX:+UseZGC -jar $APP_NAME --spring.profiles.active="$1"  > poetize.log 2>&1 &
    pid=$!
  echo "$1环境启动成功,PID:${pid}"
  fi
  exit 1
}
#停止方法
stop(){
  is_exist
  # shellcheck disable=SC2181
  if [ $? -eq "1" ];
    then kill -9 $pid
    echo "程序停止成功"
    if [ -z "$1" ];
      then exit 1
    fi
  else
    echo "没有正在运行的程序"
    exit 1
  fi
}
#输出运行状态
status(){
  is_exist
  # shellcheck disable=SC2181
  if [ $? -eq "1" ];
    then echo "程序正在运行,PID:${pid}"
    exit 1
  else
    echo "没有正在运行的程序"
    exit 1
  fi
}
#重启
restart(){
  stop "$1"
  start "$1"
}
#根据输入参数，选择执行对应方法，不输入则执行使用说明
case "$1" in
  "start")
    check_env "$2"
    start "$2"
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    check_env "$2"
    restart "$2"
    ;;
  *)
    usage
    ;;
esac